package Client.PokerClient.src;

import javax.swing.JOptionPane;

/**
 * Klasa obslugujaca komunikaty uzyskane od serwera podczas gry.
 * @author Artur Smolibowski
 */
public class ServerGTaskController {
  /**
   * Referencja do klasy glownej.
   */
  private Client client;
  /**
   * Konstruktor klasy.
   * @param client Referencja do klasy glownej.
   */
  ServerGTaskController(Client client) {
    this.client=client;
  }
  /**
   * Komunikat od serwera ze gracz dolaczyl do gry.
   * @param task Zapytanie od serwera.
   */
  public void G_PLAYERJOIN(String task) {
    task=task.substring(13);
    client.getGameController().G_PLAYERJOIN(Integer.parseInt(task));
  }
  /**
   * Komunikat od serwera ze gracz oposcil gre.
   * @param task Zapytanie od serwera.
   */
  public void G_PLAYEROUT(String task) {
	task=task.substring(12);
	client.getGameController().G_PLAYEROUT(Integer.parseInt(task));
  }
  /**
   * Metoda obslugujaca komunikat dajacy talie gracza.
   * @param task Zapytanie od serwera.
   */
  public void G_CARDS(String task) {
    task=task.substring(9);
    int[][] tmp = new int[2][5];
    for(int i=0; i<5; i++) {
      tmp[1][i]=Integer.parseInt(task.substring(0, task.indexOf(",")));
      tmp[0][i]=Integer.parseInt(task.substring(task.indexOf(",")+1, task.indexOf(";")));
      try{ task=task.substring(task.indexOf(";")+1); }
      catch( IndexOutOfBoundsException e ) { }
    }

    client.getGameController().S_CARDS(tmp);
  }
  /**
   * Metoda obslugujaca komunikat dajacy talie wszystkich graczy.
   * @param task Zapytanie od serwera.
   */
  public void G_ALL(String task) {
    task=task.substring(7);
    String[] idPlayers = new String[4];
    int[][][] playersCards = new int[4][2][5];
    String idWiner;
    for(int i=0;i<client.getGameController().getMaxPlayers();i++) {
      idPlayers[i]=task.substring(0, task.indexOf(","));
      task=task.substring(task.indexOf(",")+1);
      for(int j=0;j<5;j++) {
        playersCards[i][1][j]=Integer.parseInt(task.substring(0, task.indexOf(",")));
        task=task.substring(task.indexOf(",")+1);
        playersCards[i][0][j]=Integer.parseInt(task.substring(0, task.indexOf(";")));
        task=task.substring(task.indexOf(";")+1);
      }
      task=task.substring(2);
    }

    idWiner=task;

    client.getGameController().G_ALL(idPlayers, playersCards, idWiner);
  }
  /**
   * Specjalny komunikat dla gry samych botow, wysylajacy ich wszystkie karty.
   * @param task Zapytanie od serwera.
   */
  public void G_BALL(String task) {
    task=task.substring(8);
    String[] idPlayers = new String[4];
    int[][][] playersCards = new int[4][2][5];
    for(int i=0;i<client.getGameController().getMaxPlayers();i++) {
      idPlayers[i]=task.substring(0, task.indexOf(","));
      task=task.substring(task.indexOf(",")+1);
      for(int j=0;j<5;j++) {
        playersCards[i][1][j]=Integer.parseInt(task.substring(0, task.indexOf(",")));
        task=task.substring(task.indexOf(",")+1);
        playersCards[i][0][j]=Integer.parseInt(task.substring(0, task.indexOf(";")));
        task=task.substring(task.indexOf(";")+1);
      }
      try { task=task.substring(2); } catch(StringIndexOutOfBoundsException e) {}
    }

    client.getGameController().G_BALL(idPlayers, playersCards);
  }
  /**
   * Metoda obslugujaca komunikaty bledow wyslane przez serwer.
   * @param LastTask Ostatni komunikat wyslany do serwera.
   */
  public void G_ERROR(String LastTask) {
    LastTask=LastTask.substring(LastTask.indexOf("_")+1);
    try{ LastTask=LastTask.substring(0, LastTask.indexOf("_")); } catch(StringIndexOutOfBoundsException e) {}
	    
    switch(LastTask) {
      case "START": JOptionPane.showMessageDialog(null, "Nie udalo sie rozpoczac gry");
                    break;
    }
  }
}
